<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  
</body>
</html>
<script>

// 递归的作用： - 模拟循环
  // 非常古老的语言，并没有循环的功能，而有 函数
    // 所以，古老的计算机语言，用函数去模拟 「循环」。

// 递归的本质：即函数体内，再次 执行自己的函数 - 形成「递归」。

/* 标准的 递归 - 死循环 案例：
  function f() {
    var n = 123;
    console.log(n);
    f();
  }

  f();
*/

/* 案例：通过递归，console.log() 打印 100 -> 0

  var num = 100;
  function print() {
    console.log(num--);
    if (num === -1) { // 递归的「出口」
      return; // 只要执行了 return，即 下面的 print() 不会被继续执行。
    }
    print();
  }

*/

// 总结：递归，必须要有 「出口」， 即 return 打断 继续执行函数本身的地方。


// 案例：累进相加
  // sum(n) // 若 n = 5， return 5 + 4 + 3 + 2 + 1
function sum(n) {
  if (n === 1) {
    return 1;
  }
  return n + sum(n - 1);
    /* 
        3 + sum(3 - 1)
        3 +  2 + sum(2 - 1)
        3 +  2 +  1
    */
}
sum(3)
</script>